package com.b2mining.integration.controllers;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import org.apache.log4j.Logger;
//import com.b2mining.daemons.IntegracionSFTPMultiempresa;
import com.b2mining.daemons.TXTFile;
import com.b2mining.daemons.TXTReader;
//import com.b2mining.integration.beans.Empresa;
import com.b2mining.integration.beans.Invoice;
import com.b2mining.integration.beans.InvoiceContainer;
import com.b2mining.integration.client.txt.InvoiceTXTMapper;
import com.b2mining.integration.client.txt.TXTMapperException;
import com.b2mining.integration.helper.Constantes;
import com.b2mining.integration.helper.EnviarMail;

public class TXTInvoiceController {
	public Logger log = Logger.getLogger(this.getClass());
    SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyyMMdd_HHmmssSSS");
    TXTMapperException ex = new TXTMapperException();
    
    //----------
    int contador= 0;
    int bandaviso=0;
    boolean resultado=false;
        	
  
    public String imprimeLinea(String[] linea)
    {
    	String lineaAux="";
    	for(int i=0; i<linea.length-1; i++)
    	{
    		lineaAux+=linea[i]+"|";
    	}
    	lineaAux=lineaAux+linea[linea.length-1];
    	return lineaAux;
    }
    
  //nuevo metodo para procesar Comprobantes
    public int enviarInvoiceLeasingSend(TXTFile txtFile){
   	 int flagenviarInvoiceLeasingSend=0;
		 InvoiceContainer  lstInvoicesOK= new InvoiceContainer();
		 
		 try{
	            InvoiceTXTMapper  txtMapper = new InvoiceTXTMapper ();
	            lstInvoicesOK=(InvoiceContainer)txtMapper.parseLeasingTXT(txtFile.getFileReader());
	            log.debug("cantidad de docs de Leasing leidos y procesadas correctamente antes de enviar: " + lstInvoicesOK.getBeanCount());
	            for(int i=0; i<lstInvoicesOK.getBeanCount();i++)
	            {
	            	log.debug("cantidad de items leidos por Doc de Leasing" + ((Invoice)lstInvoicesOK.getBean(i)).getNumeroFactura() +": "+ ((Invoice)lstInvoicesOK.getBean(i)).getItemCount());
	            }
	            flagenviarInvoiceLeasingSend=2;
	        }
	        catch(Exception e){
	            log.fatal("Exception en enviarInvoiceLeasingSend: " + e,e);
	            flagenviarInvoiceLeasingSend=3;
	        }
	        finally{
		        if(flagenviarInvoiceLeasingSend==3 && bandaviso==0){
			        	InvoiceTXTMapper midt=new InvoiceTXTMapper();
		       		// enviar correo
		   	        String subject = Constantes.SUBJECTCABECERAEMPRESA1+ midt.getMiEmpresaBuscada()+"-" +Constantes.SUBJECTERRORFACLEASINGREADER;
		   	        String messages = Constantes.CUERPOERRORFACLEASINGREADER +TXTReader.varnombre+" para "+midt.getMiEmpresaBuscada();
		   	        
		   	        for(int asd=0;asd<=midt.getListaErrorTXT().size();asd++)
		   	        {
		   	        	messages=messages+"\n"+midt.getListaErrorTXT().get(asd).toString();
		   	        }
		   	        
		   	        log.debug("Subject "+subject+" messages "+messages);
		   	        
		   	        EnviarMail.enviandoMailError(subject,messages,txtFile.getCodigoAccion(),TXTReader.varnombre);
		   	     flagenviarInvoiceLeasingSend=1;
		        }
		        	log.debug("flagenviarInvoiceLeasingSend: "+ flagenviarInvoiceLeasingSend);	
	        }
	        
			return flagenviarInvoiceLeasingSend;  
	        
   }
    
  //nuevo metodo para procesar Comprobantes
    public int enviarInvoiceSend(TXTFile txtFile){
   	 int flagenviarInvoiceSend=0;
		 InvoiceContainer  lstInvoicesOK= new InvoiceContainer();
		 
		 try{
	            InvoiceTXTMapper  txtMapper = new InvoiceTXTMapper ();
	            lstInvoicesOK=(InvoiceContainer)txtMapper.parseTXT(txtFile.getFileReader());
	            log.debug("cantidad de facturas leidas procesadas correctamente antes de enviar: " + lstInvoicesOK.getBeanCount());
	            for(int i=0; i<lstInvoicesOK.getBeanCount();i++)
	            {
	            	log.debug("cantidad de items leidos por Factura " + ((Invoice)lstInvoicesOK.getBean(i)).getNumeroFactura() +": "+ ((Invoice)lstInvoicesOK.getBean(i)).getItemCount());
	            }
	            flagenviarInvoiceSend=2;
	        }
	        catch(Exception e){
	            log.fatal("Exception en enviarInvoiceSend: " + e,e);
	            flagenviarInvoiceSend=3;
	        }
	        finally{
	        	//por lo general no envia correo desde aqui, sino desde el metodo del mapper
		        if(flagenviarInvoiceSend==3 && bandaviso==0){
			        	InvoiceTXTMapper midt=new InvoiceTXTMapper();
		       		// enviar correo
		   	        String subject = Constantes.SUBJECTCABECERAEMPRESA1+ midt.getMiEmpresaBuscada()+"-"+Constantes.SUBJECTERRORFACREADER;
		   	        String messages = Constantes.CUERPOERRORFACREADER+TXTReader.varnombre+" para "+midt.getMiEmpresaBuscada();
		   	        
		   	        for(int asd=0;asd<midt.getListaErrorTXT().size();asd++)
		   	        {
		   	        	messages=messages+"\n"+midt.getListaErrorTXT().get(asd).toString();
		   	        }
		   	        
		   	        log.debug("Subject: "+subject+" - messages: "+messages);
		   	        
		   	        EnviarMail.enviandoMailError(subject,messages,txtFile.getCodigoAccion(),TXTReader.varnombre);
		   	        flagenviarInvoiceSend=1;
		        }
		        	log.debug("flagenviarInvoiceSend: "+ flagenviarInvoiceSend);	
	        }
	        
			return flagenviarInvoiceSend;  
	        
   }
    
   public String construirCabecera(TXTFile txtFile){
        
        String action=txtFile.getCodigoAccion();
        String orgId=agregarCaracter(txtFile.getOrgId(),30);
        String orgUserId=agregarCaracter(txtFile.getOrgUserId(),12);
        String errorCode=Constantes.NOERRORPROCESS;
        String header=action+orgId+orgUserId+errorCode;
        
        log.debug("header: " + header);
        return header;
    }
    
    public String agregarCaracter(String palabra,int cantidad){
        String frase = "";

        if(palabra!=null){
                frase = palabra.trim();
        }
        if(frase.length()>cantidad){
                frase=frase.substring(0,cantidad);
        }
        while (frase.length()<cantidad){
                frase = frase + " ";
        }
        return frase;
    }
    
    public String crearArchivo(String ruta, String header, String body){
        try{
            Writer output = null;
            File file = new File(ruta);
            output = new BufferedWriter(new FileWriter(file));
            output.write(header);
            output.write(body);
            output.close();
            log.debug("Creo el archivo txt: " + ruta);	
            return ruta;
        }
        catch(Exception e){
            log.fatal("Exception e: " +e);
            return null;
        }
    }
}
